/*
 * VeriTabaniSurucusu.java
 */
package eDoktor;

import eDoktor.doktor.Doktor;
import eDoktor.hasta.Hasta;
import eDoktor.hasta.HastaOykusu;
import eDoktor.hasta.Vaka;
import eDoktor.hastalik.Belirti;
import eDoktor.hastalik.Hastalik;
import eDoktor.hastalik.Tedavi;
import eDoktor.hastalik.Teshis;
import eDoktor.hastalikGrubu.Cevap;
import eDoktor.hastalikGrubu.HastalikGrubu;
import eDoktor.hastalikGrubu.Soru;
import eDoktor.kullaniciBilgileri.AdresBilgileri;
import eDoktor.kullaniciBilgileri.KisiselBilgiler;
import eDoktor.kullaniciBilgileri.Kullanici;
import eDoktor.kullaniciBilgileri.MeslekiBilgiler;
import eDoktor.saglikKurulu.SaglikKuruluUyesi;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * Veri tabanı sürücüsü sınıfı
 * @author Onuralp
 */
public class VeriTabaniSurucusu {
    private static VeriTabaniSurucusu ornek = null;
    private static Object kilit = new Object();
    private Connection baglanti = null;
    String baglantiAdresi;
    String kullaniciAdi;
    String sifre;
   
    /**
     * VeriTabaniSurucusu sınıfının yapılandırıcısı
     */
    private VeriTabaniSurucusu() {
        baglantiAdresi = "jdbc:mysql://localhost/e-doktor?";
        kullaniciAdi = "root";
        sifre = "14789632";        
    }
    
    /**
     * VeriTabaniSurucusu sınıfına erişmeyi sağlayan metod.
     * @return VeriTabaniSurucusu referansı
     */
    public static VeriTabaniSurucusu ornekOlustur() {
        if (ornek == null) {
            synchronized (kilit) {
                if (ornek == null) {
                    ornek = new VeriTabaniSurucusu();
                }
            }
        }
        return ornek;
    }
    
    /**
     * Veri tabanına bağlan.
     * @throws Exception Hata
     */
    public void baglantiyiKur() throws Exception {
        try {
            if ((baglanti != null)) {
                if (baglanti.isClosed() == false) {
                    return;
                }
            }
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            String adres = baglantiAdresi + "user=" + kullaniciAdi + "&password=" + sifre;
            baglanti = DriverManager.getConnection(adres);
        } catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        } catch (ClassNotFoundException hata) {
            System.out.println("Hata(ClassNotFoundException): " + hata.getMessage());
        }
    }

    /**
     * Veri tabanı ile olan bağlantıyı kes.
     * @throws SQLException SQL hatası
     */
    public void baglantiyiKes() throws SQLException{
        if ((baglanti != null)) {
            if (baglanti.isClosed() == false) {
                baglanti.close();
            }
        }
    }
    
    /**
     * Kullanıcı bilgileri veri tabanında ara.
     * @param kullanici Kullanıcı
     * @param kullaniciAdi Kullanıcı adı
     * @param sifre Şifre
     * @return Onay
     */
    public boolean kullaniciBilgileriniAra(Kullanici kullanici, String kullaniciAdi, String sifre) {
        try {
            String sorgu = "SELECT * FROM kullanicibilgileri WHERE ((KullaniciAdi = ?) AND (Sifre = ?))";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, kullaniciAdi);
            komut.setString(2, sifre);
            ResultSet sonuc = komut.executeQuery();
            boolean onay;
            if (sonuc.next()) {
                kullanici.setKullaniciAdi(sonuc.getString("KullaniciAdi"));
                kullanici.setSifre(sonuc.getString("Sifre"));
                kullanici.setKullaniciTuru(sonuc.getString("KullaniciTuru"));
                onay = true;
            }
            else {
                onay = false;
            }
            return onay;
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Kullanıcı bilgilerini veri tabanına ekle.
     * @param kullanici Kullanıcı
     */
    public void kullaniciBilgileriEkle(Kullanici kullanici) {
        try {
            String sorgu = "INSERT INTO kullanicibilgileri (KullaniciAdi, Sifre, KullaniciTuru) " +
                    "VALUES (?, ?, ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, kullanici.getKullaniciAdi());
            komut.setString(2, kullanici.getSifre());
            komut.setString(3, kullanici.getKullaniciTuru());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan kullanıcı bilgilerini güncelle.
     * @param kullanici Kullanıcı
     */
    public void kullaniciBilgileriGuncelle(Kullanici kullanici) {
        try {
            String sorgu = "UPDATE kullanicibilgileri SET Sifre=?, KullaniciTuru=? " +
                    "WHERE (KullaniciAdi=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, kullanici.getSifre());
            komut.setString(2, kullanici.getKullaniciTuru());
            komut.setString(3, kullanici.getKullaniciAdi());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan kullanıcı bilgilerini sil.
     * @param kullanici Kullanıcı
     */
    public void kullaniciBilgileriSil(Kullanici kullanici) {
        try {
            String sorgu = "DELETE FROM kullanicibilgileri WHERE(KullaniciAdi=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, kullanici.getKullaniciAdi());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Kişisel bilgileri veri tabanında ara.
     * @param tcKimlikNo TC Kimlik No
     * @return Kişisel bilgiler
     */
    public KisiselBilgiler kisiselBilgileriAra(String tcKimlikNo) {
        try {
            String sorgu = "SELECT * FROM kisiselbilgiler WHERE (TC_KimlikNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, tcKimlikNo);
            ResultSet sonuc = komut.executeQuery();
            KisiselBilgiler kisiselBilgiler = new KisiselBilgiler();
            if (sonuc.next()) {
                kisiselBilgiler.setTcKimlikNo(sonuc.getString("TC_KimlikNo"));
                kisiselBilgiler.setSoyadi(sonuc.getString("Soyadi"));
                kisiselBilgiler.setAdi(sonuc.getString("Adi"));
                kisiselBilgiler.setDogumYeri(sonuc.getString("DogumYeri"));
                java.sql.Date tarih = sonuc.getDate("DogumTarihi");
                kisiselBilgiler.setDogumTarihi(new java.util.Date(tarih.getTime()));
                kisiselBilgiler.setCinsiyet(sonuc.getString("Cinsiyet"));
            }
            return kisiselBilgiler;
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Kişisel bilgileri veri tabanına ekle.
     * @param kisiselBilgiler Kişisel bilgiler
     */
    public void kisiselBilgilerEkle(KisiselBilgiler kisiselBilgiler) {
        try {
            String sorgu = "INSERT INTO kisiselbilgiler (TC_KimlikNo, Soyadı, Adı, DogumYeri, DogumTarihi, Cinsiyet) " +
                    "VALUES (?, ?, ?, ?, ?, ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, kisiselBilgiler.getTcKimlikNo());
            komut.setString(2, kisiselBilgiler.getSoyadi());
            komut.setString(3, kisiselBilgiler.getAdi());
            komut.setString(4, kisiselBilgiler.getDogumYeri());
            java.util.Date tarih = kisiselBilgiler.getDogumTarihi();
            komut.setDate(5, new java.sql.Date(tarih.getTime()));
            komut.setString(6, kisiselBilgiler.getCinsiyet());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan kişisel bilgileri güncelle.
     * @param kisiselBilgiler Kişisel bilgiler
     */
    public void kisiselBilgilerGuncelle(KisiselBilgiler kisiselBilgiler) {
        try {
            String sorgu = "UPDATE kisiselbilgiler SET Soyadı=?, Adı=?, DogumYeri=?, DogumTarihi=?, Cinsiyet=? " +
                    "WHERE(TC_KimlikNo=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, kisiselBilgiler.getSoyadi());
            komut.setString(2, kisiselBilgiler.getAdi());
            komut.setString(3, kisiselBilgiler.getDogumYeri());
            java.util.Date tarih = kisiselBilgiler.getDogumTarihi();
            komut.setDate(4, new java.sql.Date(tarih.getTime()));
            komut.setString(5, kisiselBilgiler.getCinsiyet());
            komut.setString(6, kisiselBilgiler.getTcKimlikNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan kişisel bilgileri sil.
     * @param kisiselBilgiler Kişisel bilgiler
     */
    public void kisiselBilgilerSil(KisiselBilgiler kisiselBilgiler) {
        try {
            String sorgu = "DELETE FROM kisiselbilgiler WHERE(TC_KimlikNo=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, kisiselBilgiler.getTcKimlikNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Hasta bilgilerini veri tabanında ara.
     * @param hasta Hasta
     */
    public void hastaAra(Hasta hasta) {
        try {
            String sorgu = "SELECT * FROM hasta WHERE (KullaniciAdi = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, hasta.getKullaniciAdi());
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                hasta.setNo(sonuc.getInt("No"));
                KisiselBilgiler kisiselBilgiler = kisiselBilgileriAra(sonuc.getString("TC_KimlikNo"));
                hasta.setKisiselBilgiler(kisiselBilgiler);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hasta bilgilerini veri tabanında ara.
     * @param tcKimlikNo TC Kimlik No
     * @return Hasta
     */
    public Hasta hastaAra(String tcKimlikNo) {
        Hasta hasta = new Hasta();
        try {
            String sorgu = "SELECT * FROM hasta WHERE (TC_KimlikNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, tcKimlikNo);
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                hasta.setNo(sonuc.getInt("No"));
                KisiselBilgiler kisiselBilgiler = kisiselBilgileriAra(sonuc.getString("TC_KimlikNo"));
                hasta.setKisiselBilgiler(kisiselBilgiler);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return hasta;
    }
    
    /**
     * Hasta bilgilerini veri tabanına ekle.
     * @param hasta Hasta
     */
    public void hastaEkle(Hasta hasta) {
        try {
            kullaniciBilgileriEkle(hasta);
            kisiselBilgilerEkle(hasta.getKisiselBilgiler());
            String sorgu = "INSERT INTO hasta (KullaniciAdi, TC_KimlikNo) " +
                    "VALUES (?, ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, hasta.getKullaniciAdi());
            komut.setString(2, hasta.getKisiselBilgiler().getTcKimlikNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
            throw new UnsupportedOperationException(hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan hasta bilgilerini güncelle.
     * @param hasta Hasta
     */
    public void hastaGuncelle(Hasta hasta) {
        kullaniciBilgileriGuncelle(hasta);
        kisiselBilgilerGuncelle(hasta.getKisiselBilgiler());
    }
    
    /**
     * Veri tabanında bulunan hasta bilgilerini sil.
     * @param hasta Hasta
     */
    public void hastaSil(Hasta hasta) {
        try {
            String sorgu = "DELETE FROM hasta WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hasta.getNo());
            komut.executeUpdate();
            kullaniciBilgileriSil(hasta);
            kisiselBilgilerSil(hasta.getKisiselBilgiler());
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastalık gruplarını veri tabanında ara.
     * @return Hastalık grubu listesi
     */
    public List<HastalikGrubu> hastalikGrubuAra() {
        List<HastalikGrubu> hastalikGrubuListesi = new ArrayList<HastalikGrubu>();
        try {
            String sorgu = "SELECT * FROM hastalikgrubu";
            Statement komut = baglanti.createStatement();
            ResultSet sonuc = komut.executeQuery(sorgu);
            while (sonuc.next()) {
                HastalikGrubu hastalikGrubu = new HastalikGrubu();
                hastalikGrubu.setNo(sonuc.getInt("No"));
                hastalikGrubu.setTanim(sonuc.getString("Tanim"));
                hastalikGrubuListesi.add(hastalikGrubu);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return hastalikGrubuListesi;
    }
    
    /**
     * Hastalık grubunu veri tabanında ara.
     * @param hastalikGrubu Hastalık grubu
     */
    public void hastalikGrubuAra(HastalikGrubu hastalikGrubu) {
        try {
            String sorgu = "SELECT * FROM hastalikgrubu WHERE (No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalikGrubu.getNo());
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                hastalikGrubu.setTanim(sonuc.getString("Tanim"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastalıkları veri tabanında ara.
     * @param hastalikGrubu Hastalık grubu
     */
    public void hastalikAra(HastalikGrubu hastalikGrubu) {
        try {
            String sorgu = "SELECT * FROM hastalik WHERE (HastalikGrubuNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalikGrubu.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                Hastalik hastalik = new Hastalik();
                hastalik.setNo(sonuc.getInt("No"));
                hastalik.setTanim(sonuc.getString("Tanim"));
                hastalik.setAciklama(sonuc.getString("Aciklama"));
                hastalikGrubu.getHastaliklar().add(hastalik);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastalığı veri tabanında ara.
     * @param hastalik Hastalık
     */
    public void hastalikAra(Hastalik hastalik) {
        try {
            String sorgu = "SELECT * FROM hastalik WHERE (No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalik.getNo());
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                hastalik.setTanim(sonuc.getString("Tanim"));
                hastalik.setAciklama(sonuc.getString("Aciklama"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastalık numarasını veri tabanında ara.
     * @param tanim Tanım
     * @return Hastalık numarası
     */
    public int hastalikAra(String tanim) {
        int hastalikNo = 0;
        try {
            String sorgu = "SELECT * FROM hastalik WHERE (Tanim = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, tanim);
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                hastalikNo = sonuc.getInt("No");
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return hastalikNo;
    }
    
    /**
     * Hastalığı veri tabanına ekle.
     * @param hastalik Hastalık
     * @param hastalikGrubuNo Hastalık grubu numarası
     */
    public void hastalikEkle(Hastalik hastalik, int hastalikGrubuNo) {
        try {
            String sorgu = "INSERT INTO hastalik (HastalikGrubuNo, Tanim, Aciklama) " + 
                    "VALUES (?, ?, ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalikGrubuNo);
            komut.setString(2, hastalik.getTanim());
            komut.setString(3, hastalik.getAciklama());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan hastalığı güncelle.
     * @param hastalik Hastalık
     * @param hastalikGrubuNo Hastalık grubu numarası
     */
    public void hastalikGuncelle(Hastalik hastalik, int hastalikGrubuNo) {
        try {
            String sorgu = "UPDATE hastalik SET HastalikGrubuNo=?, Tanim=?, Aciklama=? WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalikGrubuNo);
            komut.setString(2, hastalik.getTanim());
            komut.setString(3, hastalik.getAciklama());
            komut.setInt(4, hastalik.getNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan hastalığı sil.
     * @param hastalik Hastalık
     */
    public void hastalikSil(Hastalik hastalik) {
        try {
            hastaliklarinBelirtileriSil(hastalik);
            teshisSil(hastalik.getTeshis().getNo());
            tedaviSil(hastalik.getTedavi().getNo());
            String sorgu = "DELETE FROM hastalik WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalik.getNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastalığa ait belirtileri veri tabanında ara.
     * @param hastalik Hastalık
     */
    public void belirtiAra(Hastalik hastalik) {
        try {
            String sorgu = "SELECT * FROM hastaliklarinbelirtileri JOIN belirti ON (hastaliklarinbelirtileri.BelirtiNo = belirti.No) WHERE (HastalikNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalik.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                Belirti belirti = new Belirti();
                belirti.setNo(sonuc.getInt("BelirtiNo"));
                belirti.setTanim(sonuc.getString("Tanim"));
                hastalik.getBelirtiler().add(belirti);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Belirtiyi veri tabanında ara.
     * @param belirti Belirti
     */
    public void belirtiAra(Belirti belirti) {
        try {
            String sorgu = "SELECT * FROM belirti WHERE (No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, belirti.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                belirti.setTanim(sonuc.getString("Tanim"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan bütün belirtilerin bilgilerini ara.
     * @param belirtiListesi Belirti listesi
     */
    public void belirtiAra(List<Belirti> belirtiListesi) {
        try {
            String sorgu = "SELECT * FROM belirti";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                Belirti belirti = new Belirti(); 
                belirti.setNo(sonuc.getInt("No"));
                belirti.setTanim(sonuc.getString("Tanim"));
                belirtiListesi.add(belirti);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Belirtinin numarasını veri tabanında ara.
     * @param tanim Tanım
     * @return Belirti numarası
     */
    public int belirtiAra(String tanim) {
        int belirtiNo = 0;
        try {
            String sorgu = "SELECT * FROM belirti WHERE (Tanim = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, tanim);
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                belirtiNo = sonuc.getInt("No");
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return belirtiNo;
    }
    
    /**
     * Belirtiyi veri tabanına ekle.
     * @param belirti Belirti
     */
    public void belirtiEkle(Belirti belirti) {
        try {
            String sorgu = "INSERT INTO belirti (Tanim) VALUES (?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, belirti.getTanim());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan belirtiyi güncelle.
     * @param belirti Belirti
     */
    public void belirtiGuncelle(Belirti belirti) {
        try {
            String sorgu = "UPDATE belirti SET Tanim=? WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, belirti.getTanim());
            komut.setInt(2, belirti.getNo());
            komut.executeQuery();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastalığa ait teşhisi veri tabanında ara.
     * @param hastalik Hastalık
     */
    public void teshisAra(Hastalik hastalik) {
        try {
            String sorgu = "SELECT * FROM teshis WHERE (HastalikNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalik.getNo());
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                Teshis teshis = new Teshis();
                teshis.setNo(sonuc.getInt("No"));
                teshis.setTanim(sonuc.getString("Tanim"));
                teshis.setUzmanlikAlani(sonuc.getString("UzmanlikAlani"));
                hastalik.setTeshis(teshis);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Teşhise ait hastalığı veri tabanında ara.
     * @param no Teşhis no
     * @return Hastalık
     */
    public Hastalik teshisAra(int no) {
        Hastalik hastalik = new Hastalik();
        try {
            String sorgu = "SELECT * FROM teshis WHERE (No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, no);
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                Teshis teshis = new Teshis();
                teshis.setNo(sonuc.getInt("No"));
                hastalik.setNo(sonuc.getInt("HastalikNo"));
                hastalikAra(hastalik);
                teshis.setTanim(sonuc.getString("Tanim"));
                teshis.setUzmanlikAlani(sonuc.getString("UzmanlikAlani"));
                hastalik.setTeshis(teshis);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return hastalik;
    }
    
    /**
     * Hastalığa ait teşhisi veri tabanına ekle. 
     * @param hastalik Hastalık
     */
    public void teshisEkle(Hastalik hastalik) {
        try {
            String sorgu = "INSERT INTO teshis (HastalikNo, Tanim, UzmanlikAlani) " + 
                    "VALUES (?, ?, ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalik.getNo());
            komut.setString(2, hastalik.getTeshis().getTanim());
            komut.setString(3, hastalik.getTeshis().getUzmanlikAlani());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan teşhisi güncelle.
     * @param hastalik Hastalık
     */
    public void teshisGuncelle(Hastalik hastalik) {
        try {
            String sorgu = "UPDATE teshis SET Tanim=?, UzmanlikAlani=? WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, hastalik.getTeshis().getTanim());
            komut.setString(2, hastalik.getTeshis().getUzmanlikAlani());
            komut.setInt(3, hastalik.getTeshis().getNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan teşhisi sil.
     * @param teshisNo Teşhis numarası
     */
    public void teshisSil(int teshisNo) {
        try {
            String sorgu = "DELETE FROM teshis WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, teshisNo);
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Soruları veri tabanında ara.
     * @param hastalikGrubu Hastalık grubu
     */
    public void soruAra(HastalikGrubu hastalikGrubu) {
        try {
            String sorgu = "SELECT * FROM soru WHERE (HastalikGrubuNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalikGrubu.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                Soru soru = new Soru();
                soru.setNo(sonuc.getInt("No"));
                soru.setTanim(sonuc.getString("Tanim"));
                hastalikGrubu.getSorular().add(soru);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Soruyu veri tabanında ara.
     * @param soru Soru
     */
    public void soruAra(Soru soru) {
        try {
            String sorgu = "SELECT * FROM soru WHERE (No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, soru.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                soru.setNo(sonuc.getInt("No"));
                soru.setTanim(sonuc.getString("Tanim"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Soruyu veri tabanında ara.
     * @param hastalikBelirtileriNo Hastalık belirtileri numarası
     * @return Soru
     */
    public Soru soruAra(int hastalikBelirtileriNo) {
        Soru soru = new Soru();
        try {
            String sorgu = "SELECT * FROM soru WHERE (HastaliklarinBelirtileriNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalikBelirtileriNo);
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                soru.setNo(sonuc.getInt("No"));
                soru.setTanim(sonuc.getString("Tanim"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return soru;
    }
    
    /**
     * Sorunun numarasını veri tabanında ara.
     * @param hastalik Hastalık
     * @param belirti Belirti
     * @param hastalikGrubuNo Hastalık grubu numarası
     * @return Soru numarası
     */
    public int soruAra(Hastalik hastalik, Belirti belirti, int hastalikGrubuNo) {
        int soruNo = 0;
        try {
            String sorgu = "SELECT * FROM soru WHERE ((HastalikGrubuNo = ?) AND (HastaliklarinBelirtileriNo = ?))";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalikGrubuNo);
            komut.setInt(2, hastaliklarinBelirtileriAra(hastalik, belirti));
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                soruNo = sonuc.getInt("No");
            }  
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return soruNo;
    }
    
    /**
     * Sorunun numarasını veri tabanında ara.
     * @param hastalik Hastalık
     * @param belirti Belirti
     * @return Soru numarası
     */
    public int soruAra(Hastalik hastalik, Belirti belirti) {
        int soruNo = 0;
        try {
            String sorgu = "SELECT * FROM soru WHERE (HastaliklarinBelirtileriNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastaliklarinBelirtileriAra(hastalik, belirti));
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                soruNo = sonuc.getInt("No");
            }  
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return soruNo;
    }
    
    /**
     * Soruyu veri tabanına ekle.
     * @param soru Soru
     * @param hastalik Hastalık 
     * @param belirti Belirti
     * @param hastalikGrubuNo Hastalık grubu numarası 
     */
    public void soruEkle(Soru soru, Hastalik hastalik, Belirti belirti, int hastalikGrubuNo) {
        try {
            String sorgu = "INSERT INTO soru (HastalikGrubuNo, HastaliklarinBelirtileriNo, Tanim) " 
                    + "VALUES (?, ?, ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalikGrubuNo);
            komut.setInt(2, hastaliklarinBelirtileriAra(hastalik, belirti));
            komut.setString(3, soru.getTanim());
            komut.executeUpdate();
            cevapEkle(soru, hastalik, belirti, hastalikGrubuNo);
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan soruyu güncelle.
     * @param soru Soru
     */
    public void soruGuncelle(Soru soru) {
        try {
            String sorgu = "UPDATE soru SET Tanim=? WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, soru.getTanim());
            komut.setInt(2, soru.getNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan soruyu sil.
     * @param soru Soru
     * @param hastaliklarinBelirtileriNo Soruyu karşılık düşen kayıt numarası
     */
    public void soruSil(Soru soru, int hastaliklarinBelirtileriNo) {
        try {
            for (Cevap cevap : soru.getSecenekler()) {
                cevapSil(cevap);
            }
            String sorgu = "DELETE FROM soru WHERE (HastaliklarinBelirtileriNo=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastaliklarinBelirtileriNo);
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Cevapları veri tabanında ara.
     * @param soru Soru
     */
    public void cevapAra(Soru soru) {
        try {
            String sorgu = "SELECT * FROM cevap WHERE (SoruNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, soru.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                Cevap cevap = new Cevap();
                cevap.setNo(sonuc.getInt("No"));
                cevap.setTanim(sonuc.getString("Tanim"));
                cevap.setOlasilik(sonuc.getDouble("Olasilik"));
                soru.getSecenekler().add(cevap);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Cevabı veri tabanında ara.
     * @param cevap Cevap
     */
    public void cevapAra(Cevap cevap) {
        try {
            String sorgu = "SELECT * FROM cevap WHERE (No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, cevap.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                cevap.setNo(sonuc.getInt("No"));
                cevap.setTanim(sonuc.getString("Tanim"));
                cevap.setOlasilik(sonuc.getDouble("Olasilik"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Soruya ait seçenekleri veri tabanına ekle.
     * @param soru Soru
     * @param hastalik Hastalık 
     * @param belirti Belirti
     * @param hastalikGrubuNo Hastalık grubu numarası 
     */
    public void cevapEkle(Soru soru, Hastalik hastalik, Belirti belirti, int hastalikGrubuNo) {
        try {
            for (Cevap cevap : soru.getSecenekler()) {
                String sorgu = "INSERT INTO cevap (SoruNo, Tanim, Olasilik) " 
                    + "VALUES (?, ?, ?)";
                PreparedStatement komut = baglanti.prepareStatement(sorgu);
                komut.setInt(1, soruAra(hastalik, belirti, hastalikGrubuNo));
                komut.setString(2, cevap.getTanim());
                komut.setDouble(3, cevap.getOlasilik());
                komut.executeUpdate();
            }
            
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan cevabı güncelle.
     * @param cevap Cevap
     */
    public void cevapGuncelle(Cevap cevap) {
        try {
            String sorgu = "UPDATE cevap SET Tanim=?, Olasilik=? WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, cevap.getTanim());
            komut.setDouble(2, cevap.getOlasilik());
            komut.setInt(3, cevap.getNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan cevabı sil.
     * @param cevap Cevap
     */
    public void cevapSil(Cevap cevap) {
        try {
            String sorgu = "DELETE FROM cevap WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, cevap.getNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Soruların işaret ettiği hastalığı veri tabanında ara.
     * @param sorular Sorular
     * @return Hastalıklar
     */
    public List<Hastalik> hastaliklarinBelirtileriniAra(List<Soru> sorular) {
        List<Hastalik> hastaliklar = new ArrayList<Hastalik>();
        try {
            String sorgu = "SELECT * FROM hastaliklarinbelirtileri JOIN soru ON (hastaliklarinbelirtileri.No = soru.HastaliklarinBelirtileriNo) WHERE (";
            for (Soru soru : sorular) {
                if (soru.isBelirtiyeIsaret()) {
                    sorgu += "soru.No = ";
                    sorgu += soru.getNo();
                    sorgu += " OR ";
                }
            }
            sorgu += "soru.No = 0) GROUP BY HastalikNo";
            Statement komut = baglanti.createStatement();
            ResultSet sonuc = komut.executeQuery(sorgu);
            while (sonuc.next()) {
                Hastalik hastalik = new Hastalik();
                hastalik.setNo(sonuc.getInt("HastalikNo"));
                hastalikAra(hastalik);
                belirtiAra(hastalik);
                teshisAra(hastalik);
                hastaliklar.add(hastalik);
            }   
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return hastaliklar;
    }
    
    /**
     * Sorunun işaret ettiği belirtiyi veri tabanında ara.
     * @param soru Soru
     */
    public void hastaliklarinBelirtileriniAra(Soru soru) {
        try {
            String sorgu = "SELECT * FROM hastaliklarinbelirtileri JOIN soru ON (hastaliklarinbelirtileri.No = soru.HastaliklarinBelirtileriNo) WHERE (soru.No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, soru.getNo());
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                Belirti belirti = new Belirti();
                belirti.setNo(sonuc.getInt("BelirtiNo"));
                belirtiAra(belirti);
                soru.setBelirti(belirti);
            }   
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastalık ile ilişkilendirilen belirtinin numarasını veri tabanında ara.
     * @param hastalik Hastalık
     * @param belirti Belirti
     * @return Hastalık - Belirti numarası
     */
    public int hastaliklarinBelirtileriAra(Hastalik hastalik, Belirti belirti) {
        int hastaliklarinBelirtileriNo = 0;
        try {
            String sorgu = "SELECT * FROM hastaliklarinbelirtileri WHERE ((HastalikNo = ?) AND (BelirtiNo = ?))";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalik.getNo());
            komut.setInt(2, belirti.getNo());
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                hastaliklarinBelirtileriNo = sonuc.getInt("No");
            }   
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return hastaliklarinBelirtileriNo;
    }
    
    /**
     * Hastalıkların belirtilerini veri tabanına ekle.
     * @param hastalik Hastalık
     */
    public void hastaliklarinBelirtileriEkle(Hastalik hastalik) {
        try {
            for (Belirti belirti : hastalik.getBelirtiler()) {
                String sorgu = "INSERT INTO hastaliklarinbelirtileri (HastalikNo, BelirtiNo) " 
                        + "VALUES (?, ?)";
                PreparedStatement komut = baglanti.prepareStatement(sorgu);
                komut.setInt(1, hastalik.getNo());
                komut.setInt(2, belirti.getNo());
                komut.executeUpdate();
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan hastalık belirti ilişkisini sil.
     * @param hastalik Hastalık
     */
    public void hastaliklarinBelirtileriSil(Hastalik hastalik) {
        try {
            for (Belirti belirti : hastalik.getBelirtiler()) {
                System.out.println("Deneme1: " + hastalik.getNo());
                int hastaliklarinBelirtileriNo = hastaliklarinBelirtileriAra(hastalik, belirti);
                System.out.println("Deneme2: " + hastaliklarinBelirtileriNo);
                Soru soru = soruAra(hastaliklarinBelirtileriNo);
                System.out.println("Deneme3: " + soru.getNo());
                cevapAra(soru);
                soruSil(soru, hastaliklarinBelirtileriNo);
                System.out.println("Deneme4: " + hastalik.getNo());
                String sorgu = "DELETE FROM hastaliklarinbelirtileri WHERE ((HastalikNo=?) AND (BelirtiNo=?))";
                PreparedStatement komut = baglanti.prepareStatement(sorgu);
                komut.setInt(1, hastalik.getNo());
                komut.setInt(2, belirti.getNo());
                komut.executeUpdate();
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Vakayı veri tabanına ekle.
     * @param hasta Hasta
     * @param vaka Vaka
     */
    public void vakaEkle(Hasta hasta, Vaka vaka) {
        try {
            String sorgu = "INSERT INTO vaka(HastaNo, TeshisNo, Zaman) VALUES(?, ?, ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hasta.getNo());
            komut.setInt(2, vaka.getHastalik().getTeshis().getNo());
            komut.setTimestamp(3, vaka.getZaman());
            komut.executeUpdate();
            hasta.getVakalar().add(vaka);
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Vakayı veri tabanında ara.
     * @param vaka 
     */
    public void vakaAra(Hasta hasta, Vaka vaka) {
        try {
            String sorgu = "SELECT * FROM vaka WHERE ((HastaNo = ?) AND (TeshisNo = ?) AND (Zaman = ?))";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hasta.getNo());
            komut.setInt(2, vaka.getHastalik().getTeshis().getNo());
            komut.setTimestamp(3, vaka.getZaman());
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                vaka.setNo(sonuc.getInt("No"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastaya ait vakaları veri tabanında ara.
     * @param hasta Hasta 
     */
    public void vakaAra(Hasta hasta) {
        try {
            String sorgu = "SELECT * FROM vaka WHERE (HastaNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hasta.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                Vaka vaka = new Vaka();
                vaka.setNo(sonuc.getInt("No"));
                int teshisNo = sonuc.getInt("TeshisNo");
                vaka.setHastalik(teshisAra(teshisNo));
                belirtiAra(vaka.getHastalik());
                tedaviAra(vaka.getHastalik());
                vaka.setZaman(sonuc.getTimestamp("Zaman"));
                hasta.getVakalar().add(vaka);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastaya ait vakayı veri tabanında ara.
     * @param hasta Hasta
     * @return Vaka
     */
    public Vaka vakaAra(Hasta hasta, int no) {
        Vaka vaka = new Vaka();
        try {
            String sorgu = "SELECT * FROM vaka WHERE ((HastaNo = ?) AND (No = ?))";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hasta.getNo());
            komut.setInt(2, no);
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                vaka.setNo(sonuc.getInt("No"));
                int teshisNo = sonuc.getInt("TeshisNo");
                vaka.setHastalik(teshisAra(teshisNo));
                belirtiAra(vaka.getHastalik());
                tedaviAra(vaka.getHastalik());
                vaka.setZaman(sonuc.getTimestamp("Zaman"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return vaka;
    }
    
    /**
     * Vakaya ait hasta öyküsünü veri tabanına ekle
     * @param vaka Vaka
     */
    public void hastaOykusuEkle(Vaka vaka) {
        try {
            for (Soru soru : vaka.getHastaOykusu().getSorular()) {
                String sorgu = "INSERT INTO hastaoykusu(VakaNo, CevapNo) VALUES(?, ?)";
                PreparedStatement komut = baglanti.prepareStatement(sorgu);
                komut.setInt(1, vaka.getNo());
                komut.setInt(2, soru.getCevap().getNo());
                komut.executeUpdate();
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hasta öyküsünü veri tabanında ara.
     * @param vaka Vaka
     */
    public void hastaOykusuAra(Vaka vaka) {
        try {
            String sorgu = "SELECT * FROM hastaoykusu join cevap on (hastaoykusu.CevapNo = cevap.No) WHERE (VakaNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, vaka.getNo());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                Soru soru = new Soru();
                soru.setNo(sonuc.getInt("SoruNo"));
                soruAra(soru);
                Cevap cevap = new Cevap();
                cevap.setNo(sonuc.getInt("No"));
                cevap.setTanim(sonuc.getString("Tanim"));
                cevap.setOlasilik(sonuc.getDouble("Olasilik"));
                soru.setCevap(cevap);
                hastaliklarinBelirtileriniAra(soru);
                vaka.getHastaOykusu().getSorular().add(soru);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Adres bilgilerini veri tabanında ara.
     * @param adresBilgileriNo Adres bilgileri no
     * @return Adres bilgileri
     */
    public AdresBilgileri adresBilgileriAra(int adresBilgileriNo) {
        AdresBilgileri adresBilgileri = new AdresBilgileri();
        try {
            String sorgu = "SELECT * FROM adresbilgileri WHERE (No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, adresBilgileriNo);
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                adresBilgileri.setNo(sonuc.getInt("No"));
                adresBilgileri.setAdres(sonuc.getString("Adres"));
                adresBilgileri.setIl(sonuc.getString("Il"));
                adresBilgileri.setIlce(sonuc.getString("Ilce"));
                adresBilgileri.setPostaKodu(sonuc.getString("PostaKodu"));
                adresBilgileri.setGorevYeri(sonuc.getString("GorevYeri"));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return adresBilgileri;
    }
    
    public MeslekiBilgiler meslekiBilgilerAra(int meslekiBilgilerNo) {
        MeslekiBilgiler meslekiBilgiler = new MeslekiBilgiler();
        try {
            String sorgu = "SELECT * FROM meslekiBilgiler WHERE (No = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, meslekiBilgilerNo);
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                meslekiBilgiler.setNo(sonuc.getInt("No"));
                meslekiBilgiler.setUnvani(sonuc.getString("Unvani"));
                meslekiBilgiler.setUzmanlikAlani(sonuc.getString("UzmanlikAlani"));
                int adresBilgileriNo = sonuc.getInt("AdresBilgileriNo");
                meslekiBilgiler.setAdresBilgileri(adresBilgileriAra(adresBilgileriNo));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return meslekiBilgiler;
    }
    
    /**
     * Belirli bir uzmanlık alanına ait doktorları veri tabanında ara.
     * @param uzmanlikAlani Uzmanlık alanı
     * @return Doktor listesi
     */
    public List<Doktor> doktorAra(String uzmanlikAlani) {
        List<Doktor> doktorlar = new ArrayList<Doktor>();
        try {
            String sorgu = "SELECT * FROM doktor JOIN meslekibilgiler ON (doktor.MeslekiBilgilerNo = meslekibilgiler.no) WHERE (UzmanlikAlani = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, uzmanlikAlani);
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                Doktor doktor = new Doktor();
                doktor.setNo(sonuc.getInt("No"));
                String tcKimlikNo = sonuc.getString("TC_KimlikNo");
                doktor.setKisiselBilgiler(kisiselBilgileriAra(tcKimlikNo));
                int meslekiBilgilerNo = sonuc.getInt("MeslekiBilgilerNo");
                doktor.setMeslekiBilgiler(meslekiBilgilerAra(meslekiBilgilerNo));
                doktorlar.add(doktor);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
        return doktorlar;
    }
    
    /**
     * Doktorun bilgilerini veri tabanında ara.
     * @param doktor Doktor
     */
    public void doktorAra(Doktor doktor) {
        try {
            String sorgu = "SELECT * FROM doktor JOIN meslekibilgiler ON (doktor.MeslekiBilgilerNo = meslekibilgiler.no) WHERE (KullaniciAdi = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, doktor.getKullaniciAdi());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                doktor.setNo(sonuc.getInt("No"));
                String tcKimlikNo = sonuc.getString("TC_KimlikNo");
                doktor.setKisiselBilgiler(kisiselBilgileriAra(tcKimlikNo));
                int meslekiBilgilerNo = sonuc.getInt("MeslekiBilgilerNo");
                doktor.setMeslekiBilgiler(meslekiBilgilerAra(meslekiBilgilerNo));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }

    /**
     * Hastalığa ait tedaviyi veri tabanında ara.
     * @param hastalik 
     */
    public void tedaviAra(Hastalik hastalik) {
        try {
            String sorgu = "SELECT * FROM tedavi WHERE (HastalikNo = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalik.getNo());
            ResultSet sonuc = komut.executeQuery();
            if (sonuc.next()) {
                Tedavi tedavi = new Tedavi();
                tedavi.setNo(sonuc.getInt("No"));
                tedavi.setAciklama(sonuc.getString("Aciklama"));
                hastalik.setTedavi(tedavi);
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Hastalığa ait tedaviyi veri tabanına ekle. 
     * @param hastalik Hastalık
     */
    public void tedaviEkle(Hastalik hastalik) {
        try {
            String sorgu = "INSERT INTO tedavi (HastalikNo, Aciklama) " + 
                    "VALUES (?, ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, hastalik.getNo());
            komut.setString(2, hastalik.getTedavi().getAciklama());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan tedaviyi güncelle.
     * @param hastalik Hastalık
     */
    public void tedaviGuncelle(Hastalik hastalik) {
        try {
            String sorgu = "UPDATE tedavi SET Aciklama=? WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, hastalik.getTedavi().getAciklama());
            komut.setInt(2, hastalik.getTedavi().getNo());
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Veri tabanında bulunan tedaviyi sil.
     * @param tedaviNo Tedavi numarası
     */
    public void tedaviSil(int tedaviNo) {
        try {
            String sorgu = "DELETE FROM tedavi WHERE (No=?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setInt(1, tedaviNo);
            komut.executeUpdate();
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
    
    /**
     * Sağlık Kurulu Üyesinin bilgilerini veri tabanında ara.
     * @param saglikKuruluUyesi Sağlık Kurulu Üyesi
     */
    public void saglikKuruluUyesiAra(SaglikKuruluUyesi saglikKuruluUyesi) {
        try {
            String sorgu = "SELECT * FROM doktor JOIN meslekibilgiler ON (doktor.MeslekiBilgilerNo = meslekibilgiler.no) WHERE (KullaniciAdi = ?)";
            PreparedStatement komut = baglanti.prepareStatement(sorgu);
            komut.setString(1, saglikKuruluUyesi.getKullaniciAdi());
            ResultSet sonuc = komut.executeQuery();
            while (sonuc.next()) {
                saglikKuruluUyesi.setNo(sonuc.getInt("No"));
                String tcKimlikNo = sonuc.getString("TC_KimlikNo");
                saglikKuruluUyesi.setKisiselBilgiler(kisiselBilgileriAra(tcKimlikNo));
                int meslekiBilgilerNo = sonuc.getInt("MeslekiBilgilerNo");
                saglikKuruluUyesi.setMeslekiBilgiler(meslekiBilgilerAra(meslekiBilgilerNo));
            }
        }
        catch (SQLException hata) {
            System.out.println("Hata(SQLException): " + hata.getMessage());
        }
    }
}
